001    package videoautomat;
002    import javax.swing.table.TableCellRenderer;
003    
004    import util.swing.AbstractTableEntryDescriptor;
005    import data.NumberValue;
006    import data.QuoteValue;
007    import data.swing.CountingStockTableModel;
008    import data.swing.CurrencyRenderer;
009    
010    /**
011     * This class implements a TableEntryDescriptor used to display the {@link VideoShop#getVideoStock()} 
012     */
013    public class TEDVideoStock extends AbstractTableEntryDescriptor {
014    
015        private String[] cNames = { "Name", "Price", "Count" };
016        private Class[] cClasses = { String.class, NumberValue.class, Integer.class };    
017        CurrencyRenderer renderer = new CurrencyRenderer(VideoShop.getCurrency());
018            /**
019             * @return the number of columns each record will consist of.
020             * 
021             * @see util.swing.TableEntryDescriptor#getColumnCount()
022             */
023            public int getColumnCount() {
024                    return 3;
025            }
026    
027            /**
028             * @return the text to be printed in the header of the given column.
029             * @param nIdx
030             *                  the index of the column for which to return the header. Indices run from 0 to
031             *                  {@link TEDVideoStock#getColumnCount()}- 1.
032             * @see util.swing.TableEntryDescriptor#getColumnName(int)
033             */
034            public String getColumnName(int nIdx) {
035                    return cNames[nIdx];
036            }
037    
038            /**
039             * @return the class of objects that make up the values of cells of the given column. This will be used to
040             *              determine the cell renderer and editor unless you specify otherwise through
041             *              util.swing.AbstractTableEntryDescriptor#getCellEditor(int) and
042             *              util.swing.AbstractTableEntryDescriptor#getCellRenderer(int).
043             * @param nIdx
044             *                  the index of the column for which to return the header. Indices run from 0 to
045             *                  {@link TEDVideoStock#getColumnCount()}- 1.
046             * @see util.swing.TableEntryDescriptor#getColumnClass(int)
047             */
048            public Class getColumnClass(int nIdx) {
049                    return cClasses[nIdx];
050            }
051    
052            /**
053             * @return the value to be printed in the given column for the given record. The actual class must be a subclass of
054             *              what was returned by {@link TEDVideoStock#getColumnClass(int)}or that class itself.
055             * @param nIdx
056             *                  the index of the column for which to return the header. Indices run from 0 to
057             *                  {@link TEDVideoStock#getColumnCount()}- 1.
058             * @see util.swing.TableEntryDescriptor#getValueAt(java.lang.Object, int)
059             */
060            public Object getValueAt(Object oRecord, int nIdx) {
061                    CountingStockTableModel.Record r = (CountingStockTableModel.Record) oRecord;
062                    switch (nIdx) {
063                            case 0 :
064                                    return r.getDescriptor().getName();
065                            case 1 :
066                                    return ((QuoteValue) r.getDescriptor().getValue()).getOffer();
067                            case 2 :
068                                    return new Integer(r.getCount());
069                    }
070                    return null;
071            }
072    
073            /**
074             * @return the cell renderer to be used for cells in the given column.
075             * @param nIdx
076             *                  the index of the column for which to return the header. Indices run from 0 to
077             *                  {@link TEDVideoStock#getColumnCount()}- 1.
078             * @see util.swing.TableEntryDescriptor#getCellRenderer(int)
079             */
080            public TableCellRenderer getCellRenderer(int nIdx) {
081                    switch (nIdx) {
082                            case 1 :
083                                    return renderer;
084                    }
085                    return super.getCellRenderer(nIdx);
086            }
087    }